package main

/*
 * Go语言包设计有三个特性：
 * 1. 显式声明：所有导入的包都必须在每个文件的开头显式声明；
 * 2. 无环依赖：禁止包的环状依赖；
 * 3. 无须遍历：编译后包的目标文件不仅记录包本身的导出信息，同时还记录了包的依赖关系。
 *
 * Go语言编译工具对源码目录有严格的要求：
 * 每个工作空间(workspace)必须由 bin、pkg、src 三个目录组成
 * bin 目录主要存放可执行文件；
 * pkg 目录主要存放编译好的库文件（主要是*.a文件）；
 * src 目录需要存放Go语言的源文件；
 *
 * GOROOT 是一个全局且唯一的变量，用于指定存放Go语言本身的目录路径（安装路径）
 * GOPATH 是一个工作空间的变量，可以有多个（;分隔），用于指定工作空间的目录路径
 * 通常 go get 会使用第一个工作空间保存下载的第三方库（包），此库其他空间也可使用；
 *
 * 包的代码必须全部放在包中，并且源文件开头都必须一致使用 package <name> 声明
 * Go语言包可以由多个文件组成，文件名不需要与包一致，包名建议使用小写字符
 *
 * Go语言使用名称首字母大小写来判断一个对象的访问权限，对包同样如此。
 * 首字母大写，可被包外访问，即为public，首字母小写，则仅包内成员可访问，即internal
 *
 * 导入包时可以使用 包名.函数名 的方式使用包内函数，
 * 如果包编译后是一个可执行程序，会使用 package main 的方式来声明 main 包。
 * Go语言不允许导入包又不使用，这样会在编译时报错
 *
 * 约定俗成：所有非标准库包的导入路径以所在组织的互联网域名为前缀（避免冲突，利于检索）
 */

// import "crypto/rand" // 默认模式：rand.Function
// import R "crypto/rand" // 包重命名：R.Function
// import . "crypto/rand" // 简便模式：Function
// import _ "crypto/rand" // 匿名导入：仅让该包执行初始化函数

func main() {

}
